package com.tinfeng.uplevel;

public class JavaStringBuilder {
    // 什么是StringBuilder
    // 可变的字符序列

    // 为什么需要StringBuilder
    // 因为String具有不可变性 但StringBuilder具有可变性，想比String类不会产生大量无用数据，性能上会大大提高
    // 因此对于需要频繁操作字符串的场景，建议使用 Stringbuilder 类来代替 String 类

    // StringBuffer
    // 是StringBuilder的前身，他是StringBuilder的线程安全版本，安全的代价就是执行效率下降，StringBuffer目前并不常用了

    // 用法
    // 构造方法
    // StringBuilder() 构造一个空字符串生成器，初始容量为16个字符
    // StringBuilder(int catpacity) 构造一个空字符串生成器，初始容量参数capacity指定
    // StringBuilder(CharSequence seq) 构造一个字符串生成器，该生成器包含于指定的CharSequence相同的字符
    // StringBuilder(String str) 构造初始化为指定字符串内容的字符串生成器

    // 获取容量 capacity()

    // 字符串替换 StringBuilder replace(int start, int end, String str)，用指定字符串替换从索引位置 start 开始到 end 索引位置结束（不包含 end）的子串

    // 字符串反转 StringBuildr reverse()

    public static void main(String[] args) {
        StringBuilder str = new StringBuilder("Hello");
        StringBuilder str2 = new StringBuilder("Hello");
        System.out.println(str + " " +str2);  // 要加个空字符串隔开
        str.append(" ");
        str.append("World");
        System.out.println(str); // append可叠加
        // StringBuilder 还可实现链式调用
        // str.append(" ").append(" World")

        // 获取容量
        StringBuilder str3 = new StringBuilder();
        System.out.println(str3.capacity());
        // 拼接容量
        for (int i = 0; i < 16 ; i++) {
            str3.append(i);
        }
        // 拼接后的
        System.out.println(str3.capacity());

        // 替换字符
        str.replace(0,3,"o"); // 下标0-2的都变为一个o
        System.out.println(str);
        // StringBuilder delete(int start, int end) 是先删除在插入

        // 字符串反转
        str.reverse();
        System.out.println(str);


    }

}
